home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok82.lha / Mini / txt / Code.mod next >
Text File  |  1993-08-15  |  3KB  |  79 lines

  1. MODULE Code;
  2.  
  3. IMPORT io;
  4.  
  5. VAR labels: INTEGER;
  6.  
  7. PROCEDURE W (s: ARRAY OF CHAR); BEGIN io.WriteString(s) END W;
  8. PROCEDURE WL(s: ARRAY OF CHAR); BEGIN W(s); io.WriteLn  END WL;
  9.  
  10. PROCEDURE DCL*(var: ARRAY OF CHAR);   (* Speicher für var reservieren *)
  11. BEGIN W(var); WL(": dc.l 0") END DCL;
  12.  
  13. PROCEDURE MOVEvarD0*(var: ARRAY OF CHAR);     (* var nach D0 kopieren *)
  14. BEGIN W("    MOVE.L  "); W(var); WL(",D0") END MOVEvarD0;
  15.  
  16. PROCEDURE MOVEconstD0*(c: LONGINT);      (* Konstante c nach D0 laden *)
  17. BEGIN W("    MOVE.L  #"); io.WriteInt(c,0); WL(",D0") END MOVEconstD0;
  18.  
  19. PROCEDURE MOVED0var*(name: ARRAY OF CHAR);       (* D0 in D0 kopieren *)
  20. BEGIN W("    MOVE.L  D0,"); WL(name) END MOVED0var;
  21.  
  22. PROCEDURE MOVED0D1*; BEGIN WL("    MOVE.L  D0,D1") END MOVED0D1;
  23. PROCEDURE ADDD1D0 *; BEGIN WL("    ADD.L   D1,D0") END ADDD1D0;
  24. PROCEDURE NEGD0   *; BEGIN WL("    NEG.L   D0"   ) END NEGD0;
  25. PROCEDURE TSTD0   *; BEGIN WL("    TST.L   D0"   ) END TSTD0;
  26.  
  27. PROCEDURE GetLabel*(): INTEGER;              (* neues Label anfordern *)
  28. BEGIN INC(labels); RETURN labels END GetLabel;
  29.  
  30. PROCEDURE Label*(l: INTEGER);                   (* Label <l> ausgeben *)
  31. BEGIN W("L"); io.WriteHex(l,3); WL(":") END Label;
  32.  
  33. PROCEDURE BLE*(l: INTEGER);                       (* BLE <l> erzeugen *)
  34. BEGIN W("    BLE     L"); io.WriteHex(l,3); WL("") END BLE;
  35. PROCEDURE BRA*(l: INTEGER);                       (* BRA <l> erzeugen *)
  36. BEGIN W("    BRA     L"); io.WriteHex(l,3); WL("") END BRA;
  37.  
  38. PROCEDURE PrintD0*;                           (* Wert von D0 ausgeben *)
  39. BEGIN
  40.   WL("    LEA     _format,A0");
  41.   WL("    MOVE.L  A0,D1"     );
  42.   WL("    LEA     _print,A0" );
  43.   WL("    MOVE.L  A0,D2"     );
  44.   WL("    MOVE.L  D0,(A0)"   );
  45.   WL("    MOVE.L  _dos,A6"   );
  46.   WL("    JSR     -954(A6)"  );
  47. END PrintD0;
  48.  
  49. PROCEDURE StartUp*(start: INTEGER);       (* Dos-Library öffnen, etc. *)
  50. BEGIN
  51.   WL("_dos:      DC.L    0"              );
  52.   WL("_dosname:  DC.B    'dos.library',0");
  53.   WL("_format:   DC.B    '%ld',10,0"     );
  54.   WL("           DS.L    0"              );
  55.   WL("_print:    DC.L    0"              );
  56.   Label(start);
  57.   WL("    LEA     _dosname,A1"           );
  58.   WL("    MOVE.L  #37,D0"                );
  59.   WL("    MOVE.L  $4,A6"                 );
  60.   WL("    JSR     -552(A6)"              );
  61.   WL("    TST.L   D0"                    );
  62.   WL("    BNE.S   _ok"                   );
  63.   WL("    RTS"                           );
  64.   WL("_ok:"                              );
  65.   WL("    MOVE.L  D0,_dos"               );
  66. END StartUp;
  67.  
  68. PROCEDURE CleanUp*;                    (* Dos-Library schließen, etc. *)
  69. BEGIN
  70.   WL("    MOVE.L  _dos,A1" );
  71.   WL("    MOVE.L  $4,A6"   );
  72.   WL("    JSR     -414(A6)");
  73.   WL("    MOVE.L  #0,D0"   );
  74.   WL("    RTS"             );
  75.   WL("    END"             );
  76. END CleanUp;
  77.  
  78. BEGIN labels := 0 END Code.
  79.